"""
数据库和用户认证配置模块
负责初始化SQLAlchemy数据库连接和Flask-Login用户认证系统
"""

from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager


db = SQLAlchemy()

login_manager = LoginManager()

def init_db(app):
    """
    初始化数据库连接和登录管理器
    
    该函数完成以下工作：
    1. 从配置文件加载数据库连接信息
    2. 配置SQLAlchemy的优化选项
    3. 初始化数据库连接
    4. 设置登录管理器的配置
    5. 创建所有数据库表（如果不存在）
    
    Args:
        app (Flask): Flask应用实例，用于获取配置信息和应用上下文
        
    Note:
        此函数应在应用启动时调用，确保数据库和认证系统正确初始化
    """
    app.config.from_object('app.config')

    # 禁用SQLAlchemy的修改跟踪功能，提高性能
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    # 初始化数据库连接
    db.init_app(app)

    # 初始化登录管理器
    login_manager.init_app(app)
    # 设置登录视图的端点，未登录用户将被重定向到此端点
    login_manager.login_view = 'auth.login'

    # 如果表不存在，将根据模型定义创建新表
    with app.app_context():
        db.create_all() 